/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.com.model.core;

import java.util.List;
import org.com.model.Cliente;
import org.com.model.Produto;
import org.hibernate.Session;

/**
 *
 * @author Afonso Rodrigues
 */
public class Dao implements br.com.biblioteca.dba.IBanco {

    private Session session;

    public Dao() {
    }

    @Override
    public void save(Object o) {
        open();
        session.save(o);
        commit();
    }

    @Override
    public void update(Object o) {
        open();
        session.update(o);
        commit();
    }

    /**
     * Lista a partir do nome da classe do objeto Select * from table;
     *
     * @param Object obj
     * @return List de objetos do tipo da classe
     */
    @Override
    public List list(Object o) {
        String hql = "from " + o.getClass().getSimpleName();
        System.out.println(hql);
        open();
        List list = session.createQuery(hql).list();
        commit();
        return list;
    }

    /**
     * Lista a partir do nome do Cliente
     *
     * @param Cliente obj
     * @return List de clientes.
     */
    public List<Cliente> listDetails(Cliente obj) {
        String hql = "from " + obj.getClass().getSimpleName() + " where nome=" + obj.getNome();
        System.out.println(hql);
        open();
        List list = session.createQuery(hql).list();
        commit();
        return list;
    }

    /**
     * Lista a partir da marca do Produto
     *
     * @param Produto obj
     * @return List de produtos.
     */
    public List<Produto> listDetails(Produto obj) {
        String hql = "from " + obj.getClass().getSimpleName() + " where marca=" + obj.getMarca();
        System.out.println(hql);
        open();
        List list = session.createQuery(hql).list();
        commit();
        return list;
    }

    @Override
    public void delete(Object o) {
        open();
        session.delete(o);
        commit();
    }

    @Override
    public boolean isLogin(String login, String pwd) {
        String hql = "count(*) cliente where login =" + login + " password= " + pwd;
        System.out.println(hql);
        open();
        List list = session.createSQLQuery(hql).list();
        if (list.isEmpty()) {
            commit();
            return false;
        } else {
            commit();
            return true;
        }
    }

    private void open() {
        session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
    }

    private void commit() {
        session.getTransaction().commit();
        session.close();
    }
     
}
